package com.ftg.learn.mybatis.chapter3.mapper;

import com.ftg.learn.mybatis.chapter3.entity.SaleFramer;
import com.ftg.learn.mybatis.chapter3.vo.FrameSale;
import org.apache.ibatis.annotations.Many;
import org.apache.ibatis.annotations.Result;
import org.apache.ibatis.annotations.Results;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.mapping.FetchType;

import java.util.List;

/**
 * 用来管理 农场的全部方法
 * @author kangjx
 * @createTime 2022/10/13
 */
public interface SaleFramerMapper {

    /**
     * 通过id查询农场信息
     * @param id  主键
     * @return SaleFramer
     */
    @Select("select id,name,address,boss,type from saleframer where id = #{id}")
    SaleFramer findById(long id);

    /**
     * 查询全部农场信息，以及农场提供的所有商品
     * @return
     */
    @Select("select id,name,address,boss,type from saleframer")
    @Results({
//            字段与列信息映射
        @Result(column = "id",property = "id",id = true),
////            字段与列信息映射
//        @Result(column = "name",property = "name"),
////            字段与列信息映射
//        @Result(column = "address",property = "address"),
////            字段与列信息映射
//        @Result(column = "boss",property = "boss"),
////            字段与列信息映射
//        @Result(column = "type",property = "type"),
        /**
        *    虚拟出来的 sales 这个字段，在表里面不存在，为了显示当前农场里面的全部商品信息
         *  column= 代表列 作用是什么，为指的定的sql提供唯一数  com.ftg.learn.mybatis.chapter3.mapper.SaleMapper.selectByFid
         *    selectByFid（农场的id） 所以我们在这里通过 column 来指定当前农场里哪一列信息要做为selectByFid 的参数
         *    property = 指定当前的类里面的集合（映射实体）
         *
         *    many : 级联方式
         *      @oen  :  表示指一对一的方式来完成 主从表之间是一对一关系
         *      @many : 一对多关系
         *         select =  对应查询的方法 方法的全路径 com.ftg.learn.mybatis.chapter3.mapper.SaleMapper.selectByFid
         *         fetchType = 表示级联查询的方式
         *                 FetchType.LAZY 表示采用懒加载方式进行查询
         *                 FetchType.EAGER 表示采用非懒加载謶进行查询
         *                 default = FetchType.default  ===  FetchType.LAZY
        */
        @Result(column = "id",property = "sales",many=@Many(fetchType = FetchType.LAZY,select = "com.ftg.learn.mybatis.chapter3.mapper.SaleMapper.selectByFid"))
    })
    List<FrameSale> showFramerWithSale();

}
